using System;
using System.Collections.Generic;
using System.Text;
using System.Data;           //CommandType
using System.Data.SqlClient; //SqlConnection, SqlCommand, SqlDataReader
using Etna.Exportaciones.En;

namespace Etna.Exportaciones.Ad
{
   public class AdRequerimiento
   {
      //public AdRequerimiento(SqlConnection con)
      //{
      //   conexion = con;
      //}

       public EnRequerimiento Leer(int pidRequerimiento, SqlConnection conexion)
      {
         EnRequerimiento oEnRequerimiento = null;
         SqlCommand cmd = new SqlCommand("sExportaciones_RequerimientoLeer", conexion);
         cmd.CommandType = CommandType.StoredProcedure;

         SqlParameter Parametro1 = cmd.Parameters.Add("@piidRequerimiento", SqlDbType.Int);
         Parametro1.Direction = ParameterDirection.Input;
         Parametro1.Value = pidRequerimiento;

         SqlDataReader drd = cmd.ExecuteReader(CommandBehavior.SingleResult);
         if (drd != null)
         {

            if (drd.Read())
            {
               oEnRequerimiento = new EnRequerimiento();
               oEnRequerimiento.idRequerimiento = drd.GetInt32(0);
               if (!drd.IsDBNull(1))
               {
                   oEnRequerimiento.sDescripcion = drd.GetString(1);
               }
               if (!drd.IsDBNull(2))
               {
                   oEnRequerimiento.sCodigoCliente = drd.GetString(2);
               }
               if (!drd.IsDBNull(3))
               {
                   oEnRequerimiento.sRuc = drd.GetString(3);
               }
               if (!drd.IsDBNull(4))
               {
                   oEnRequerimiento.sRazonSocial = drd.GetString(4);
               }
               if (!drd.IsDBNull(5))
               {
                   oEnRequerimiento.idDireccionEntrega = drd.GetInt32(5);
               }
               if (!drd.IsDBNull(6))
               {
                   oEnRequerimiento.idDireccionCobranza = drd.GetInt32(6);
               }
               if (!drd.IsDBNull(7))
               {
                   oEnRequerimiento.idDireccionFactura = drd.GetInt32(7);
               }
               if (!drd.IsDBNull(8))
               {
                   oEnRequerimiento.sDireccionEntrega = drd.GetString(8);
               }
               if (!drd.IsDBNull(9))
               {
                   oEnRequerimiento.sDireccionCobranza = drd.GetString(9);
               }
               if (!drd.IsDBNull(10))
               {
                   oEnRequerimiento.sDireccionFactura = drd.GetString(10);
               }
               if (!drd.IsDBNull(11))
               {
                   oEnRequerimiento.dfechaEntrega = drd.GetDateTime(11);
               }

              
               if (!drd.IsDBNull(12))
               {
                   oEnRequerimiento.dfechaRequerimiento = drd.GetDateTime(12);
               }
               if (!drd.IsDBNull(13))
               {
                   oEnRequerimiento.sestadoRequerimiento = drd.GetString(13);
               }

               if (!drd.IsDBNull(14))
               {
                   oEnRequerimiento.iNuevo = drd.GetInt32(14);
               }
            }
            drd.Close();
         }

         return oEnRequerimiento;
      }

       public bool Insertar(EnRequerimiento poEnRequerimiento, SqlConnection conexion)
      {
         bool bExito = false;
         SqlCommand cmd = new SqlCommand("sExportaciones_RequerimientoInsertar", conexion);
         cmd.CommandType = CommandType.StoredProcedure;

         SqlParameter Parametro1 = cmd.Parameters.Add("@piidCliente", SqlDbType.Int);
         Parametro1.Direction = ParameterDirection.Input;
         Parametro1.Value = poEnRequerimiento.idCliente;

         SqlParameter Parametro2 = cmd.Parameters.Add("@piidDireccionEntrega", SqlDbType.Int);
         Parametro2.Direction = ParameterDirection.Input;
         Parametro2.Value = poEnRequerimiento.idDireccionEntrega;

         SqlParameter Parametro3 = cmd.Parameters.Add("@piidDireccionCobranza", SqlDbType.Int);
         Parametro3.Direction = ParameterDirection.Input;
         Parametro3.Value = poEnRequerimiento.idDireccionCobranza;

         SqlParameter Parametro4 = cmd.Parameters.Add("@piidDireccionFactura", SqlDbType.Int);
         Parametro4.Direction = ParameterDirection.Input;
         Parametro4.Value = poEnRequerimiento.idDireccionFactura;

         SqlParameter Parametro5 = cmd.Parameters.Add("@pifechaEntrega", SqlDbType.DateTime);
         Parametro5.Direction = ParameterDirection.Input;
         Parametro5.Value = poEnRequerimiento.dfechaEntrega;

         SqlParameter Parametro6 = cmd.Parameters.Add("@piestadoRequerimiento", SqlDbType.VarChar);
         Parametro6.Direction = ParameterDirection.Input;
         Parametro6.Value = poEnRequerimiento.sestadoRequerimiento;

         int n = cmd.ExecuteNonQuery();
         bExito = (n > 0);

         return bExito;
      }

       public bool Eliminar(int poEnRequerimiento, int idEstadoRequerimiento , SqlConnection conexion)
       {
           bool bExito = false;
           SqlCommand cmd = new SqlCommand("sExportaciones_RequerimientoEliminar", conexion);
           cmd.CommandType = CommandType.StoredProcedure;

           SqlParameter Parametro1 = cmd.Parameters.Add("@piidRequerimiento", SqlDbType.Int);
           Parametro1.Direction = ParameterDirection.Input;
           Parametro1.Value = poEnRequerimiento;

           SqlParameter Parametro2 = cmd.Parameters.Add("@piestadoRequerimiento", SqlDbType.Int);
           Parametro2.Direction = ParameterDirection.Input;
           Parametro2.Value = idEstadoRequerimiento;

           int n = cmd.ExecuteNonQuery();
           bExito = (n > 0);

           return bExito;
       }


      public bool Modificar(EnRequerimiento poEnRequerimiento, SqlConnection conexion)
      {
         bool bExito = false;
         SqlCommand cmd = new SqlCommand("sExportaciones_RequerimientoModificar", conexion);
         cmd.CommandType = CommandType.StoredProcedure;

         SqlParameter Parametro1 = cmd.Parameters.Add("@piidRequerimiento", SqlDbType.Int);
         Parametro1.Direction = ParameterDirection.Input;
         Parametro1.Value = poEnRequerimiento.idRequerimiento;

         SqlParameter Parametro2 = cmd.Parameters.Add("@piidCliente", SqlDbType.Int);
         Parametro2.Direction = ParameterDirection.Input;
         Parametro2.Value = poEnRequerimiento.idCliente;

         SqlParameter Parametro3 = cmd.Parameters.Add("@piidDireccionEntrega", SqlDbType.Int);
         Parametro3.Direction = ParameterDirection.Input;
         Parametro3.Value = poEnRequerimiento.idDireccionEntrega;

         SqlParameter Parametro4 = cmd.Parameters.Add("@piidDireccionCobranza", SqlDbType.Int);
         Parametro4.Direction = ParameterDirection.Input;
         Parametro4.Value = poEnRequerimiento.idDireccionCobranza;

         SqlParameter Parametro5 = cmd.Parameters.Add("@piidDireccionFactura", SqlDbType.Int);
         Parametro5.Direction = ParameterDirection.Input;
         Parametro5.Value = poEnRequerimiento.idDireccionFactura;

         SqlParameter Parametro6 = cmd.Parameters.Add("@pifechaEntrega", SqlDbType.VarChar);
         Parametro6.Direction = ParameterDirection.Input;
         Parametro6.Value = poEnRequerimiento.dfechaEntrega;

         SqlParameter Parametro7 = cmd.Parameters.Add("@piestadoRequerimiento", SqlDbType.VarChar);
         Parametro7.Direction = ParameterDirection.Input;
         Parametro7.Value = poEnRequerimiento.sestadoRequerimiento;

         int n = cmd.ExecuteNonQuery();
         bExito = (n > 0);

         return bExito;
      }

      public List<EnRequerimiento> Listar(
          int pidCliente,  
          int pidRequerimiento, 
          string psDescripcion,  
          string pdfechaInicio,
          string pdfechaFin,
          int pidEstadoReq,  
          
          SqlConnection conexion)
      {
         List<EnRequerimiento> loEnRequerimiento = null;
         EnRequerimiento oEnRequerimiento = null;
         SqlCommand cmd = new SqlCommand("sExportaciones_RequerimientoListar", conexion);
         cmd.CommandType = CommandType.StoredProcedure;

         SqlParameter Parametro1 = null;
         if (pidCliente <= 0 || pidCliente == null)
         {
             Parametro1 = cmd.Parameters.Add("@piidcliente", DBNull.Value);                          
         }
         else
         {
             Parametro1 = cmd.Parameters.Add("@piidcliente", SqlDbType.Int);
             Parametro1.Direction = ParameterDirection.Input;
             Parametro1.Value = pidCliente;
         }

         SqlParameter Parametro2 = null;
         if (pidRequerimiento <= 0 || pidRequerimiento == null)
         {
             Parametro2 = cmd.Parameters.Add("@piidRequerimiento", DBNull.Value);
         }
         else
         {
             Parametro2 = cmd.Parameters.Add("@piidRequerimiento", SqlDbType.Int);
             Parametro2.Direction = ParameterDirection.Input;
             Parametro2.Value = pidRequerimiento;
         }

         SqlParameter Parametro3 = null;
         if (String.IsNullOrEmpty( psDescripcion) )
         {
             Parametro3 = cmd.Parameters.Add("@pidesRequerimiento", DBNull.Value);
         }
         else
         {
             Parametro3 = cmd.Parameters.Add("@pidesRequerimiento", SqlDbType.VarChar, 50);
             Parametro3.Direction = ParameterDirection.Input;
             Parametro3.Value = psDescripcion;
         }

         SqlParameter Parametro4 = null;
         if (string.IsNullOrEmpty( pdfechaInicio ))
         {
             Parametro4 = cmd.Parameters.Add("@pifechainicio", DBNull.Value);
         }
         else
         {
             Parametro4 = cmd.Parameters.Add("@pifechainicio", SqlDbType.Date);
             Parametro4.Direction = ParameterDirection.Input;
             Parametro4.Value = DateTime.Parse( pdfechaInicio );
         }

         SqlParameter Parametro5 = null;
         if (string.IsNullOrEmpty( pdfechaFin ))
         {
             Parametro5 = cmd.Parameters.Add("@pifechafin", DBNull.Value);
         }
         else
         {
             Parametro5 = cmd.Parameters.Add("@pifechafin", SqlDbType.Date);
             Parametro5.Direction = ParameterDirection.Input;
             Parametro5.Value = DateTime.Parse(pdfechaFin);
         }

         SqlParameter Parametro6 = null;
         if (pidEstadoReq <= 0 || pidEstadoReq == null)
         {
             Parametro6 = cmd.Parameters.Add("@piestadoreq", DBNull.Value);
         }
         else
         {
             Parametro6 = cmd.Parameters.Add("@piestadoreq", SqlDbType.Date);
             Parametro6.Direction = ParameterDirection.Input;
             Parametro6.Value = pidEstadoReq;
         }

         SqlDataReader drd = cmd.ExecuteReader(CommandBehavior.SingleResult);
         if (drd != null)
         {

            loEnRequerimiento = new List<EnRequerimiento>();
            while (drd.Read())
            {
               oEnRequerimiento = new EnRequerimiento();
               oEnRequerimiento.idRequerimiento = drd.GetInt32(0);
               if (!drd.IsDBNull(1))
               {
                   oEnRequerimiento.sDescripcion = drd.GetString(1);
               }

               if (!drd.IsDBNull(2))
               {
                  oEnRequerimiento.sestadoRequerimiento = drd.GetString(2);
               }
               if (!drd.IsDBNull(3))
               {
                   oEnRequerimiento.dfechaRequerimiento = drd.GetDateTime(3);
               }
               if (!drd.IsDBNull(4))
               {
                   oEnRequerimiento.dfechaEntrega = drd.GetDateTime(4);
               }
               if (!drd.IsDBNull(5))
               {
                   oEnRequerimiento.iNuevo = drd.GetInt32(5);
               }

               loEnRequerimiento.Add(oEnRequerimiento);
            }
            drd.Close();
         }

         return loEnRequerimiento;
      }
   }
}
